#include "Data.h"

/*Funcao: CreateMatrix
  Parametros:
  int size - Ordem da Matrix
  
  Saida:
  float** - Matriz de float
  Aloca dinamicamente uma matrix de ordem size
*/
float **createMatrix(int size){
  int i;
  float **m;
  //Aloca uma matriz de ordem size  
  m = (float**)malloc(size*sizeof(float**));

  for(i=0; i< size; i++){
    m[i] = (float*)malloc(size*sizeof(float*));
  }
  //Se houve falha na alocacao, a execucao eh finalizada
  if(m == NULL){
    printf("ERROR - NULL MATRIX");
    exit(-1);
  }
  //retorna a matrix alocada
  return m;
}

/*Funcao: CreateVector
  Parametros:
  int size - Tamanho do vetor
  Saida:
  float* - vetor de float
  Aloca dinamicamente um vetor de tamanho size
*/
float *createVector(int size){
  float *v;
  //Aloca o vetor de tamanho size
  v = (float*)malloc(size*sizeof(float*));
  //Se algum erro aconteceu, a execucao eh finalizada
  if(v == NULL){
    printf("ERROR - NULL VECTOR");
    exit(-1);
  }
  return v;
}

/*Funcao: reMatrixFromFile
  Parametros:
  FILE *file_in
  float **matrixA
  Saida:
  NULL
  Le os dados do arquivo file_in e armazena na matrixA
 */
void readMatrixFromFile(FILE *file_in, float **matrixA){
  int i, j;
  //Leitura do arquivo para a matrixA
  for(i=0; i<J_ORDER; i++){
    for(j=0; j<J_ORDER; j++){
      fscanf(file_in, "%f ", &matrixA[i][j]);
    }
  }
}

/*Funcao: readVectorFromFile
  Parametros:
  FILE *file_in
  float *vectorB
  Saida:
  NULL
  Le os dados do arquivo file_in e armazena no vectorB
 */
void readVectorFromFile(FILE *file_in, float *vectorB){
  int i;
  //Leitura do arquivo ao vectorB
  for(i=0; i<J_ORDER; i++){
    fscanf( file_in, "%f", &vectorB[i] );
  }
}
